#ifndef __CREATELIB_HPP__
#define __CREATELIB_HPP__

#include "DirScanner.hpp"
#include "CreateInvertIndexTable.hpp"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <regex>
#include <unordered_map>
#include <sstream>

using namespace std;

class DirScanner;

struct Page {
    string _title;
    string _url;
    string _content;
};

class PageLib {
public:
    PageLib();
    PageLib(DirScanner& dirScanner);
    void readOriXml(const string& filename);   // 读xml文件 
    void generateOriLib();                     // 生成未去重的网页库和网页索引库
    void readNewXml(const string& filename);   // 读未去重的dat文件
    void calculateSimHash();                   // 计算每篇网页的simhash值
    void similarityCheck();                    // 检查网页相似度
    void generateNewLib();                     // 生成去重后的网页库和网页索引库

private:
    vector<Page> _page;                        // 存放未去重网页信息
    DirScanner _dirScanner;                    // 目录扫描类对象
    map<int, vector<Page>> _ripePage;          // 以docid为key值的未去重网页信息
    map<int, uint64_t> _simHashMap;            // 存放每篇网页的simhash值
    vector<int> _reserveIndex;                 // 记录是否需要删除文章(1保留 0移除)
};


#endif
